package com.atguigu.gulimall.product;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

/**
 * 1、整合mybatis-puls
 *      1、导入依赖
 *      2、配置
 *          1、配置数据源
 *              1、导入输入句酷驱动
 *              2、在applicaiotn.yml配置数据源相关信息
 *          2、配置mybatis-puls
 *              1、使用@MapperScan
 *              2、告诉mybatis-puls，sql映射文件位置
 * 2、逻辑删除
 *      1、配置全局的逻辑删除规则（省略）
 *      2、配置逻辑删除的组件Bean（省略）
 *      3、给Bean加上逻辑删除注解（@TableField()）
 * 3、JSR303
 *      1、给Bean添加校验注解 javax.validation.constraints，并定义自己的massage提示
 *      2、开启校验功能@Valid
 *          1、效果：校验错误后会有默认的响应
 *      3、给校验的bean紧跟BindingResult。就可以获取到校验结果
 *      4、分组校验（多场景复杂校验）
 *          1、@NotBlank(message = "品牌名必须提交", groups = {AddGroup.class, UpdateGroup.class})
 *          给校验注解标注什么情况下需要进行校验
 *          2、@Validated({AddGroup.class})
 *          3、默认没有指定分组的校验注解@NotBlank，在分组校验情况下不生效，只会在@Validated生效。
 *      5、自定义校验
 *          1、编写一个自定义校验注解
 *          2、编写一个自定义校验器 ConstraintValidator
 *          3、关联自定义校验注解和自定义校验器
 *              @Documented
                 * //约束。同一个注解可以指定多个不同的校验器，
                 * @Constraint(
                 *         validatedBy = { 可以指定多个不同的校验器
                 * )
                 * //可以标注在哪些位置。方法、字段等。
                 * @Target({ElementType.ME
                 * //注解的时机。这里是可以在运行时获取校验
 * 4.统一的异常处理
 * @RestControllerAdvice
 *      1、编写异常处理类，是用@RestControllerAdvice。
 *      2、是用@ExceptionHandler标注方法可以处理的异常。
 */
@MapperScan("com.atguigu.gulimall.product.dao")
@EnableDiscoveryClient
@SpringBootApplication
public class GulimallProductApplication {

    public static void main(String[] args) {
        SpringApplication.run(GulimallProductApplication.class, args);
    }

}
